Это case выражение является основой управления потоком в Эликсире. В отличие от императивных операторов переключения, case является функциональным выражением, которое возвращает результат соответствующей ветви, позволяя разработчикам мгновенно раскладывать сложные структуры данных, такие как карты и кортежи, при этом обеспечивая исчерпывающую логику.
1. Сопоставление шаблонов и привязка переменных
Это case выражение позволяет проверить значение по набору шаблонов. Оно выполняет код, связанный с первым совпадающим шаблоном и возвращает значение этого кода. Вы можете привязать переменные внутри шаблона для немедленного использования в логике ветвления.
%{state: some_state} = person ->
IO.puts "#{person.name} живёт в #{some_state}"
end
2. Визуальный поток логики
3. Условия-ограничения и полнота сопоставления
Используя ключевое слово when вы можете дополнить структурное сопоставление логикой предикатов (например, is_number(age) and age >= 21). Эликсир требует сопоставления для каждого возможного входного значения; если ни один шаблон не подходит, возникает ошибка CaseClauseError вызывается.